from tkinter import *
from tkinter import ttk
import tkinter as tk
import tkinter.messagebox as msgbox
from tkinter import scrolledtext
import os
def Close():
    reply=msgbox.askyesno('提示',"您确定退出系统吗？")
    if reply==True:
        root.destroy()
def Help():
    HelpGUI=Toplevel()
    HelpGUI.title('帮助')
    HelpGUI.geometry('350x350')
    HelpGUI.resizable(False,False)
    scr=scrolledtext.ScrolledText(HelpGUI,width=40,height=20,font=("Microsoft YaHei",12))
    scr.insert(tk.INSERT,"""\
    用户须知：
    1.本产品功能有限，仅支持这些操作：
     （1）录入书籍信息
     （2）浏览书籍信息
     （3）删除书籍信息
     （4）修改书籍信息
     （5）按书名统计书籍的数量
     （6）按作者统计书籍的数量
     （7）按出版社统计书籍的数量
     （8）按类别统计书籍的数量
    2.有关上述操作的说明：
     （1）1.1至1.4功能全部在基本功能菜单栏下，且每录入一条书籍信息或者修改书籍信息或者删除书籍信息，都会实时更新在文件中，用户无需进行点击保存的操作，如果用户想要浏览文件信息，需要选择菜单栏下的“浏览书籍信息”即可看到当前存入的所有书籍
     （2）1.5至1.8功能在高级需求菜单栏下，这部分的功能会用一张表格输出
     （3）有关排序的操作直接点击界面中的列名称即可，系统会自动根据选中的列信息进行排序
     （4）退出的功能直接点击关闭即可
    3.产品说明：
     ·开发者：
         计算机20-2班 王思进 201002603
    """)
    scr.configure(state='disabled')
    scr.pack()   
def CreateBookInfo():
    CBIGUI=Toplevel()
    CBIGUI.title('录入书籍信息')
    CBIGUI.geometry('300x300')
    def IsEmpty(text):
        temp=0
        for i in text:
           if not i.isspace():
               temp=1
               break
        if temp==1:
            return 0
        else:
            return 1
    def click():
        num=addnuminput.get()
        name=addnameinput.get()
        author=addauthorinput.get()
        press=addpressinput.get()
        category=v.get()
        if IsEmpty(num) or IsEmpty(name) or IsEmpty(author) or IsEmpty(press) or IsEmpty(category):
            msgbox.showerror(title='提示',message="请填写所有信息！")
        else:
            f=open('图书.csv','r',encoding='utf-8-sig')
            for line in f.readlines():
                info=line[:-1].split(",")
                if len(info)<5:
                    break
                if info[0]==num:
                     msgbox.showinfo(title='错误',message="序号已存在！")
                     f.close()
                     CBIGUI.destroy()
                     return
            f.close()
            f=open('图书.csv','a',encoding='utf-8-sig')
            f.write('{},{},{},{},{}\n'.format(num,name,author,press,category))
            f.close()
            reply=msgbox.showinfo(title='提示',message ="写入成功！")
            if reply:
                CBIGUI.destroy()
    addnum=Label(CBIGUI,text="序号",font=("Microsoft YaHei",10),anchor='w')
    addnum.place(x=30,y=30,height=20,width=80)
    addnuminput=Entry(CBIGUI,font=("Microsoft YaHei",10))
    addnuminput.place(x=100,y=30,height=24,width=150)
    addname=Label(CBIGUI,text="书名",font=("Microsoft YaHei",10),anchor='w')
    addname.place(x=30,y=60,height=20,width=80)
    addnameinput=Entry(CBIGUI,font=("Microsoft YaHei",10))
    addnameinput.place(x=100,y=60,height=24,width=150)
    addauthor=Label(CBIGUI,text="作者",font=("Microsoft YaHei",10),anchor='w')
    addauthor.place(x=30,y=90,height=20,width=80)
    addauthorinput=Entry(CBIGUI,font=("Microsoft YaHei",10))
    addauthorinput.place(x=100,y=90,height=24,width=150)
    addpress=Label(CBIGUI,text="出版社",font=("Microsoft YaHei",10),anchor='w')
    addpress.place(x=30,y=120,height=20,width=80)
    addpressinput=Entry(CBIGUI,font=("Microsoft YaHei",10))
    addpressinput.place(x=100,y=120,height=24,width=150)
    addcategory=Label(CBIGUI,text="类别",font=("Microsoft YaHei",10),anchor='w')
    addcategory.place(x=30,y=150,height=20,width=80)
    """addcategoryinput=Entry(CBIGUI,font=("Microsoft YaHei",10))
    addcategoryinput.place(x=100,y=150,height=24,width=150)"""
    v=StringVar()
    v.set('其它')
    w1=Radiobutton(CBIGUI,text="专业书", value='专业书',variable=v)
    w2=Radiobutton(CBIGUI,text="工具书", value='工具书',variable=v)
    w3=Radiobutton(CBIGUI,text="报告", value='报告',variable=v)
    w4=Radiobutton(CBIGUI,text="小说", value='小说',variable=v)
    w5=Radiobutton(CBIGUI,text="其它", value='其它',variable=v)
    w1.place(x=100,y=150,height=20,width=60)
    w2.place(x=100,y=170,height=20,width=60)
    w3.place(x=95,y=190,height=20,width=60)
    w4.place(x=95,y=210,height=20,width=60)
    w5.place(x=95,y=230,height=20,width=60)
    Buttonadd=Button(CBIGUI,command=click,text="添加",font=("Microsoft YaHei",10))
    Buttonadd.place(x=120,y=260,height=30,width=70)
def DeleteBook():
    DBGUI=Toplevel()
    DBGUI.title('删除书籍信息')
    DBGUI.geometry('400x400')
    def click():
        num=addnuminput.get()
        fl=False
        def confirm():
            reply=msgbox.askyesno('提示',"您确定要删除该图书信息吗？")
            if reply==True:
                with open("图书.csv","r",encoding="utf-8-sig") as f:
                    lines=f.readlines()
                with open("图书.csv","w",encoding="utf-8-sig") as f_w:
                    for line in lines:
                        info=line[:-1].split(",")
                        if info[0]==num:
                            continue
                        f_w.write(line)
            DBGUI.destroy()
        f=open('图书.csv','r',encoding='utf-8-sig')
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[0]==num:
                fl=True
                name=info[1];author=info[2];press=info[3];category=info[4]
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该图书信息！")
            DBGUI.destroy()
        else:
            Info=Label(DBGUI,text="当前图书信息如下：")
            Info.place(x=50,y=60)
            addnum=Label(DBGUI,text="序号："+num,font=("Microsoft YaHei",10),anchor='w')
            addnum.place(x=50,y=90,height=15,width=80)
            addname=Label(DBGUI,text="书名："+name,font=("Microsoft YaHei",10),anchor='w')
            addname.place(x=50,y=120,height=15,width=80)
            addauthor=Label(DBGUI,text="作者："+author,font=("Microsoft YaHei",10),anchor='w')
            addauthor.place(x=50,y=150,height=15,width=80)
            addpress=Label(DBGUI,text="出版社："+press,font=("Microsoft YaHei",10),anchor='w')
            addpress.place(x=50,y=180,height=15,width=80)
            addcategory=Label(DBGUI,text="类别："+category,font=("Microsoft YaHei",10),anchor='w')
            addcategory.place(x=50,y=210,height=15,width=80)
            adddeletebutton=Button(DBGUI,command=confirm,text="确认删除",font=("Microsoft YaHei",10))
            adddeletebutton.place(x=170,y=270,height=30,width=60)
    addnum=Label(DBGUI,text="序号",font=("Microsoft YaHei",10),anchor='w')
    addnum.place(x=50,y=30,height=20,width=80)
    addnuminput=Entry(DBGUI,font=("Microsoft YaHei",10))
    addnuminput.place(x=100,y=30,height=24,width=150)
    addsearchbutton=Button(DBGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=30,height=24,width=40)
def ModifyBook():
    MBGUI=Toplevel()
    MBGUI.title('修改书籍信息')
    MBGUI.geometry('400x400')
    def click():
        num=addnuminput.get()
        def IsEmpty(text):
            temp=0
            for i in text:
               if not i.isspace():
                   temp=1
                   break
            if temp==1:
                return 0
            else:
                return 1
        def confirm():
            name=addnameinput.get()
            author=addauthorinput.get()
            press=addpressinput.get()
            category=v.get()
            if IsEmpty(name) or IsEmpty(author) or IsEmpty(press) or IsEmpty(category):
                msgbox.showerror(title='提示',message="请填写所有信息！")
            else:
                reply=msgbox.askyesno('提示',"您确定要修改该图书信息吗？")
                if reply==True:
                    with open("图书.csv","r",encoding="utf-8-sig") as f:
                        lines=f.readlines()
                    with open("图书.csv","w",encoding="utf-8-sig") as f_w:
                        for line in lines:
                            info=line[:-1].split(",")
                            if info[0]==num:
                                f_w.write('{},{},{},{},{}\n'.format(num,name,author,press,category))
                                continue
                            f_w.write(line)
                MBGUI.destroy()
        fl=False
        f=open('图书.csv','r',encoding='utf-8-sig')
        i=1;
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[0]==num:
                fl=True
                name=info[1];author=info[2];press=info[3];category=info[4]
            i=i+1
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该图书信息！")
            MBGUI.destroy()
        else:
            Info=Label(MBGUI,text="当前图书信息如下：")
            Info.place(x=50,y=60)
            sv=StringVar()
            sv.set(name)
            addname=Label(MBGUI,text="书名：",font=("Microsoft YaHei",10),anchor='w')
            addname.place(x=50,y=90,height=15,width=80)
            addnameinput=Entry(MBGUI,textvariable=sv,font=("Microsoft YaHei",10))
            addnameinput.place(x=150,y=90,height=24,width=150)
            sv=StringVar()
            sv.set(author)
            addauthor=Label(MBGUI,text="作者：",font=("Microsoft YaHei",10),anchor='w')
            addauthor.place(x=50,y=120,height=15,width=80)
            addauthorinput=Entry(MBGUI,textvariable=sv,font=("Microsoft YaHei",10))
            addauthorinput.place(x=150,y=120,height=24,width=150)
            sv=StringVar()
            sv.set(press)
            addpress=Label(MBGUI,text="出版社：",font=("Microsoft YaHei",10),anchor='w')
            addpress.place(x=50,y=150,height=15,width=80)
            addpressinput=Entry(MBGUI,textvariable=sv,font=("Microsoft YaHei",10))
            addpressinput.place(x=150,y=150,height=24,width=150)
            addcategory=Label(MBGUI,text="类别",font=("Microsoft YaHei",10),anchor='w')
            addcategory.place(x=50,y=180,height=20,width=80)
            """addcategoryinput=Entry(CBIGUI,font=("Microsoft YaHei",10))
            addcategoryinput.place(x=100,y=150,height=24,width=150)"""
            v=StringVar()
            v.set(category)
            w1=Radiobutton(MBGUI,text="专业书", value='专业书',variable=v)
            w2=Radiobutton(MBGUI,text="工具书", value='工具书',variable=v)
            w3=Radiobutton(MBGUI,text="报告", value='报告',variable=v)
            w4=Radiobutton(MBGUI,text="小说", value='小说',variable=v)
            w5=Radiobutton(MBGUI,text="其它", value='其它',variable=v)
            w1.place(x=100,y=180,height=20,width=60)
            w2.place(x=100,y=200,height=20,width=60)
            w3.place(x=95,y=220,height=20,width=60)
            w4.place(x=95,y=240,height=20,width=60)
            w5.place(x=95,y=260,height=20,width=60)
            adddeletebutton=Button(MBGUI,command=confirm,text="确认修改",font=("Microsoft YaHei",10))
            adddeletebutton.place(x=170,y=310,height=30,width=60)
    addnum=Label(MBGUI,text="序号",font=("Microsoft YaHei",10),anchor='w')
    addnum.place(x=50,y=30,height=20,width=80)
    addnuminput=Entry(MBGUI,font=("Microsoft YaHei",10))
    addnuminput.place(x=100,y=30,height=24,width=150)
    addsearchbutton=Button(MBGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=30,height=24,width=40)
def CountName():
    CNGUI=Toplevel()
    CNGUI.title('按书名统计书籍的数量')
    CNGUI.geometry('500x500')
    def click():
        name=addnameinput.get()
        f=open('图书.csv','r',encoding='utf-8-sig')
        fl=False
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[1]==name:
                fl=True
                break
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该图书信息！")
            CNGUI.destroy()
        else:
            addnameinput.configure(state='disabled')
            def treeview_sort_column(tv,col,reverse):
                l=[(tv.set(k,col),k) for k in tv.get_children('')]
                try:
                    l.sort(key=lambda t:int(t[0]),reverse=reverse)
                except:
                    l.sort(reverse=reverse)
                for index,(val,k) in enumerate(l):
                    tv.move(k,'',index)
                tv.heading(col,command=lambda:treeview_sort_column(tv,col,not reverse))
            columns=("序号","书名","作者", "出版社", "类别")
            tree=ttk.Treeview(CNGUI,columns=columns)
            tree['show']='headings'
            tree.place(x=20,y=50,width=460,height=400)
            tree.column("序号",width=30,anchor='c')
            tree.column("书名",width=80,anchor='c')
            tree.column("作者",width=80,anchor='c')
            tree.column("出版社",width=80,anchor='c')
            tree.column("类别",width=80,anchor='c')
            tree.heading("序号",text="序号")
            tree.heading("书名",text="书名")
            tree.heading("作者",text="作者")
            tree.heading("出版社",text="出版社")
            tree.heading("类别",text="类别")
            f=open('图书.csv','r',encoding='utf-8-sig')
            i=0
            for line in f.readlines():
                info=line[:-1].split(",")
                if info[1]==name:
                    tree.insert("",'end',values=(info[0],info[1],info[2],info[3],info[4]))
                    i=i+1
            f.close()
            for col in columns:
                tree.heading(col,text=col,command=lambda _col=col:treeview_sort_column(tree,_col,False))
                i=str(i)
            addcount=Label(CNGUI,text="共有"+i+"条记录",font=("Microsoft YaHei",10))
            addcount.place(x=400,y=460)
    addname=Label(CNGUI,text="书名",font=("Microsoft YaHei",10),anchor='w')
    addname.place(x=20,y=20,height=20,width=80)
    addnameinput=Entry(CNGUI,font=("Microsoft YaHei",10))
    addnameinput.place(x=100,y=20,height=24,width=150)
    addsearchbutton=Button(CNGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=20,height=24,width=40)
def CountAuthor():
    CAGUI=Toplevel()
    CAGUI.title('按作者统计书籍的数量')
    CAGUI.geometry('500x500')
    def click():
        author=addauthorinput.get()
        f=open('图书.csv','r',encoding='utf-8-sig')
        fl=False
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[2]==author:
                fl=True
                break
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该作者信息！")
            CAGUI.destroy()
        else:
            addauthorinput.configure(state='disabled')
            def treeview_sort_column(tv,col,reverse):
                l=[(tv.set(k,col),k) for k in tv.get_children('')]
                try:
                    l.sort(key=lambda t:int(t[0]),reverse=reverse)
                except:
                    l.sort(reverse=reverse)
                for index,(val,k) in enumerate(l):
                    tv.move(k,'',index)
                tv.heading(col,command=lambda:treeview_sort_column(tv,col,not reverse))
            columns=("序号","书名","作者", "出版社", "类别")
            tree=ttk.Treeview(CAGUI,columns=columns)
            tree['show']='headings'
            tree.place(x=20,y=50,width=460,height=400)
            tree.column("序号",width=30,anchor='c')
            tree.column("书名",width=80,anchor='c')
            tree.column("作者",width=80,anchor='c')
            tree.column("出版社",width=80,anchor='c')
            tree.column("类别",width=80,anchor='c')
            tree.heading("序号",text="序号")
            tree.heading("书名",text="书名")
            tree.heading("作者",text="作者")
            tree.heading("出版社",text="出版社")
            tree.heading("类别",text="类别")
            f=open('图书.csv','r',encoding='utf-8-sig')
            i=0
            for line in f.readlines():
                info=line[:-1].split(",")
                if info[2]==author:
                    tree.insert("",'end',values=(info[0],info[1],info[2],info[3],info[4]))
                    i=i+1
            f.close()
            for col in columns:
                tree.heading(col,text=col,command=lambda _col=col:treeview_sort_column(tree,_col,False))
                i=str(i)
            addcount=Label(CAGUI,text="共有"+i+"条记录",font=("Microsoft YaHei",10))
            addcount.place(x=400,y=460)
    addauthor=Label(CAGUI,text="作者",font=("Microsoft YaHei",10),anchor='w')
    addauthor.place(x=20,y=20,height=20,width=80)
    addauthorinput=Entry(CAGUI,font=("Microsoft YaHei",10))
    addauthorinput.place(x=100,y=20,height=24,width=150)
    addsearchbutton=Button(CAGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=20,height=24,width=40)
def CountPress():
    CPGUI=Toplevel()
    CPGUI.title('按出版社统计书籍的数量')
    CPGUI.geometry('500x500')
    def click():
        press=addpressinput.get()
        f=open('图书.csv','r',encoding='utf-8-sig')
        fl=False
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[3]==press:
                fl=True
                break
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该出版社信息！")
            CPGUI.destroy()
        else:
            addpressinput.configure(state='disabled')
            def treeview_sort_column(tv,col,reverse):
                l=[(tv.set(k,col),k) for k in tv.get_children('')]
                try:
                    l.sort(key=lambda t:int(t[0]),reverse=reverse)
                except:
                    l.sort(reverse=reverse)
                for index,(val,k) in enumerate(l):
                    tv.move(k,'',index)
                tv.heading(col,command=lambda:treeview_sort_column(tv,col,not reverse))
            columns=("序号","书名","作者", "出版社", "类别")
            tree=ttk.Treeview(CPGUI,columns=columns)
            tree['show']='headings'
            tree.place(x=20,y=50,width=460,height=400)
            tree.column("序号",width=30,anchor='c')
            tree.column("书名",width=80,anchor='c')
            tree.column("作者",width=80,anchor='c')
            tree.column("出版社",width=80,anchor='c')
            tree.column("类别",width=80,anchor='c')
            tree.heading("序号",text="序号")
            tree.heading("书名",text="书名")
            tree.heading("作者",text="作者")
            tree.heading("出版社",text="出版社")
            tree.heading("类别",text="类别")
            f=open('图书.csv','r',encoding='utf-8-sig')
            i=0
            for line in f.readlines():
                info=line[:-1].split(",")
                if info[3]==press:
                    tree.insert("",'end',values=(info[0],info[1],info[2],info[3],info[4]))
                    i=i+1
            f.close()
            for col in columns:
                tree.heading(col,text=col,command=lambda _col=col:treeview_sort_column(tree,_col,False))
                i=str(i)
            addcount=Label(CPGUI,text="共有"+i+"条记录",font=("Microsoft YaHei",10))
            addcount.place(x=400,y=460)
    addpress=Label(CPGUI,text="出版社",font=("Microsoft YaHei",10),anchor='w')
    addpress.place(x=20,y=20,height=20,width=80)
    addpressinput=Entry(CPGUI,font=("Microsoft YaHei",10))
    addpressinput.place(x=100,y=20,height=24,width=150)
    addsearchbutton=Button(CPGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=20,height=24,width=40)
def CountCategory():
    CCGUI=Toplevel()
    CCGUI.title('按类别统计书籍的数量')
    CCGUI.geometry('500x500')
    def click():
        category=addcategoryinput.get()
        f=open('图书.csv','r',encoding='utf-8-sig')
        fl=False
        for line in f.readlines():
            info=line[:-1].split(",")
            if len(info)<5:
                break
            if info[4]==category:
                fl=True
                break
        f.close()
        if fl==False:
            msgbox.showinfo(title='错误',message="未找到该类别信息！")
            CCGUI.destroy()
        else:
            addcategoryinput.configure(state='disabled')
            def treeview_sort_column(tv,col,reverse):
                l=[(tv.set(k,col),k) for k in tv.get_children('')]
                try:
                    l.sort(key=lambda t:int(t[0]),reverse=reverse)
                except:
                    l.sort(reverse=reverse)
                for index,(val,k) in enumerate(l):
                    tv.move(k,'',index)
                tv.heading(col,command=lambda:treeview_sort_column(tv,col,not reverse))
            columns=("序号","书名","作者", "出版社", "类别")
            tree=ttk.Treeview(CCGUI,columns=columns)
            tree['show']='headings'
            tree.place(x=20,y=50,width=460,height=400)
            tree.column("序号",width=30,anchor='c')
            tree.column("书名",width=80,anchor='c')
            tree.column("作者",width=80,anchor='c')
            tree.column("出版社",width=80,anchor='c')
            tree.column("类别",width=80,anchor='c')
            tree.heading("序号",text="序号")
            tree.heading("书名",text="书名")
            tree.heading("作者",text="作者")
            tree.heading("出版社",text="出版社")
            tree.heading("类别",text="类别")
            f=open('图书.csv','r',encoding='utf-8-sig')
            i=0
            for line in f.readlines():
                info=line[:-1].split(",")
                if info[4]==category:
                    tree.insert("",'end',values=(info[0],info[1],info[2],info[3],info[4]))
                    i=i+1
            f.close()
            for col in columns:
                tree.heading(col,text=col,command=lambda _col=col:treeview_sort_column(tree,_col,False))
                i=str(i)
            addcount=Label(CCGUI,text="共有"+i+"条记录",font=("Microsoft YaHei",10))
            addcount.place(x=400,y=460)
    addcategory=Label(CCGUI,text="类别",font=("Microsoft YaHei",10),anchor='w')
    addcategory.place(x=20,y=20,height=20,width=80)
    addcategoryinput=Entry(CCGUI,font=("Microsoft YaHei",10))
    addcategoryinput.place(x=100,y=20,height=24,width=150)
    addsearchbutton=Button(CCGUI,command=click,text="查询",font=("Microsoft YaHei",10))
    addsearchbutton.place(x=270,y=20,height=24,width=40)
def Root():
    root.title('个人书籍管理系统')
    root['width']=800
    root['height']=600
    menu=Menu(root)
    submenu=Menu(menu,tearoff=0)
    submenu.add_command(label="录入书籍信息",command=CreateBookInfo)
    #submenu.add_command(label="保存书籍信息")
    submenu.add_command(label="浏览书籍信息",command=Table)
    #submenu.add_command(label="查询书籍信息")
    submenu.add_command(label="删除书籍信息",command=DeleteBook)
    submenu.add_command(label="修改书籍信息",command=ModifyBook)
    menu.add_cascade(label="基本功能",menu=submenu)
    submenu=Menu(menu,tearoff=0)
    submenu.add_command(label="按书名统计书籍的数量",command=CountName)
    submenu.add_command(label="按作者统计书籍的数量",command=CountAuthor)
    submenu.add_command(label="按出版社统计书籍的数量",command=CountPress)
    submenu.add_command(label="按类别统计书籍的数量",command=CountCategory)
    #submenu.add_command(label="按书名对书籍进行排序")
    menu.add_cascade(label="高级需求",menu=submenu)
    submenu=Menu(menu,tearoff=0)
    submenu.add_command(label="帮助",command=Help)
    menu.add_cascade(label="工具",menu=submenu)
    root.config(menu=menu)
    addLabel=Label(root,text="点击“工具”->“帮助”即可查看本系统的相关操作",font=("Microsoft YaHei",10))
    addLabel.place(x=20,y=560)
    root.protocol("WM_DELETE_WINDOW",Close)
def Table():
    def treeview_sort_column(tv,col,reverse):
        l=[(tv.set(k,col),k) for k in tv.get_children('')]
        try:
            l.sort(key=lambda t:int(t[0]),reverse=reverse)
        except:
            l.sort(reverse=reverse)
        for index,(val,k) in enumerate(l):
            tv.move(k,'',index)
        tv.heading(col,command=lambda:treeview_sort_column(tv,col,not reverse))
    columns=("序号","书名","作者", "出版社", "类别")
    tree=ttk.Treeview(root,columns=columns)
    tree['show']='headings'
    tree.place(x=10,y=10,width=780,height=550)
    tree.column("序号",width=80,anchor='c')
    tree.column("书名",width=150,anchor='c')
    tree.column("作者",width=150,anchor='c')
    tree.column("出版社",width=150,anchor='c')
    tree.column("类别",width=150,anchor='c')
    tree.heading("序号",text="序号")
    tree.heading("书名",text="书名")
    tree.heading("作者",text="作者")
    tree.heading("出版社",text="出版社")
    tree.heading("类别",text="类别")
    f=open('图书.csv','r',encoding='utf-8-sig')
    for line in f.readlines():
        info=line[:-1].split(",")
        tree.insert("",'end',values=(info[0],info[1],info[2],info[3],info[4]))
    f.close()
    for col in columns:
        tree.heading(col,text=col,command=lambda _col=col:treeview_sort_column(tree,_col,False))
if __name__ == '__main__':
    root=Tk()
    Root()
    open('图书.csv','a',encoding='utf-8-sig')
    Table()
    root.mainloop()
